home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Suzy B Software 2
/
Suzy B Software CD-ROM 2 (1994).iso
/
extras
/
programm
/
gemfsc20
/
gemfsc20.lzh
/
GNUGEM27
/
AESRC.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-24
|
2KB
|
126 lines
/*
* Aes rectangle utils
* rc_copy copy grects
* rc_equal compare two grects
* rc_intersect check if two grects intersect, ret intersec
* rc_union union of two grects
* grect_to_aray convert GRECT to a vdi pxy style coordinate
* array
*
* ++jrb bammi@cadence.com
* modified: mj -- ntomczak@vm.ucs.ualberta.ca
*/
#include <macros.h>
#include <gemfast.h>
#ifdef __DEF_ALL__
#define L_rc_copy
#define L_rc_equal
/***
#define L_max
#define L_min
***/
#define L_rc_inter
#define L_grect_to
#endif /* __DEF_ALL__ */
#ifdef L_rc_copy
/* rc_copy copy grects
* always returns success
*/
int rc_copy(GRECT *src, GRECT *dst)
{
*dst = *src;
return 1;
}
#endif /* L_rc_copy */
#ifdef L_rc_equal
/* rc_equal compare two rectangles
* returns 0 is not same
*/
rc_equal(GRECT *p1, GRECT *p2)
{
return ((p1->g_x == p2->g_x) &&
(p1->g_y == p2->g_y) &&
(p1->g_w == p2->g_w) &&
(p1->g_h == p2->g_h));
}
#endif /* L_rc_equal */
#if 0
#ifdef L_max
static int max(int x, int y)
{
return (x > y)? x : y;
}
#endif /* L_max */
#ifdef L_min
static int min(int x, int y)
{
return (x > y)? y : x;
}
#endif /* L_min */
#endif
#ifdef L_rc_inter
/*
* rc_intersect check if two rects intersect
* returns 0 if they do not intersect,
* otherwise returns 1 and rect2 is set to common area
*/
int rc_intersect(GRECT *r1, GRECT *r2)
{
int tx, ty, tw, th, ret;
tx = max (r2->g_x, r1->g_x);
tw = min (r2->g_x + r2->g_w, r1->g_x + r1->g_w) - tx;
if (ret = (0 < tw)) {
ty = max (r2->g_y, r1->g_y);
th = min (r2->g_y + r2->g_h, r1->g_y + r1->g_h) - ty;
if (ret = (0 < th)) {
r2->g_x = tx;
r2->g_y = ty;
r2->g_w = tw;
r2->g_h = th;
}
}
return (ret);
}
#endif /* L_rc_inter */
#ifdef L_grect_to
/*
* convert a GRECT to a pxy array
* returns &pxy_array[0]
*/
int *grect_to_array(GRECT *area, int *array)
{
int *ip = array;
*ip = area->g_x;
ip[2] = *ip;
ip++;
*ip = area->g_y;
ip[2] = *ip;
ip++;
*ip++ += area->g_w - 1;
*ip += area->g_h - 1;
return (array);
}
#endif /* L_grect_to */
/* rc_union todo */
/* -eof- */